
#ifndef PDF_WRITER_H
#define PDF_WRITER_H

#include <string>
#include "util/dtk_maindoc_ptr.hpp"
#include "WriterBase.hpp"
#include <unordered_map>
#include <map>

namespace  AMCAX::Exchange 
{
    class PDFWriter : public WriterBase
    {
    public:
        void SetInputFile(Dtk_string inputFile);
        Dtk_ErrorStatus WriteInit(Dtk_string dumpFile, const Dtk_string& outputFile) override;
        Dtk_ErrorStatus WriteInit(Dtk_string dumpFile, const Dtk_string& outputFile, int option) override;
        Dtk_ErrorStatus WriteEnd() override;
        //void InitComponent(Dtk_ComponentPtr inComponent);
        //void EndComponent();
        void InitNode(Dtk_NodePtr inNode);
        void EndNode();
        //void WriteKinematics(const Dtk_KinematicPtr& inKinematics);
        //void WriteConstraint(const Dtk_ConstraintPtr& inConstraint);
        //void WriteAxisSystem(const Dtk_AxisSystemPtr& inAxis);
        //void WriteDrawing(const Dtk_DrawingPtr& inDrawing);
        //void WriteCamera(const Dtk_CameraPtr& inCamera);
        //void WriteFdt(const Dtk_FdtPtr& inFdt);
        //void WriteFeature(const Dtk_FeaturePtr& inFeature);
        // void WriteBody(Dtk_BodyPtr& inBody, Dtk_tab<Dtk_ID>& outIds) override;
        //void WriteGlobalDataSet(const Dtk_GlobalDataSetPtr& inSelectionSet);
        //void WriteMetaData(const Dtk_MetaDataPtr& inMetaData);
        //void WriteColorPalette(const Dtk_ColorInfosSetPtr &inColorInfos);
        //void WriteLayerFilter(const Dtk_LayerInfosSetPtr& inLayerInfos);*/    
        // Dtk_ErrorStatus CreateAssembly(Dtk_ComponentPtr inComponent, Dtk_ID& outAssemblyId) override;
        // Dtk_ErrorStatus CreateInstance(Dtk_ID inAssemblyId, Dtk_ID inPrototypeId, Dtk_transfoPtr matrix, Dtk_ID& outIdInst) override;
        //void WriteDrawing(const Dtk_DrawingPtr& inDrawing);
        void WriteMesh(Dtk_MeshPtr& inMeshToWrite, Dtk_tab<Dtk_ID>& outIds) override;
        void WriteAxisSystem(const Dtk_AxisSystemPtr& inAxis);
        void WriteFdt(const Dtk_FdtPtr& inFdt);
        void WriteEntity(Dtk_EntityPtr inEntity);
    private:
        Dtk_string m_outputFileName;
        Dtk_string m_inputFileName;
        std::map<Dtk_Node::NodeDataTypeEnum, Dtk_Size_t> modelInventory;

    };
}

#endif